'''
# 用于采集各年试卷答案的程序，答案中各部分与各部分以`*`隔开，`N`表示删除的题，`$XX`用于修改指定位置的答案
target = [[], [], [], []]
boundry = [ 0, 0, 0, 0 ]
paper_name = input('卷子年份：')
num = 1

for i in range(4):
    content = input('%d-area-%d: ' % (i + 1, num)).upper()
    num += 1
    while content != '*':
        if content == '' or content == '$':
            num -= 1
        elif content[0] == '$':
            modify_num = int(content[1:])
            modify_content = input('modify %d: '% modify_num).upper()
            modify_area = 0
            if modify_num < boundry[0] or boundry[0] == 0:
                modify_area = 0
            elif modify_num < boundry[1] or boundry[1] == 0:
                modify_area = 1
            elif modify_num < boundry[2] or boundry[2] == 0:
                modify_area = 2
            elif modify_num < boundry[3] or boundry[3] == 0:
                modify_area = 3
                
            if modify_content == 'N':
                modify_content = '删除'

            if modify_area == 0:
                target[modify_area][modify_num - 1] = modify_content
            elif boundry[modify_area] == 0:
                target[modify_area][modify_num - 1 - boundry[modify_area - 1]] = modify_content
            else:
                target[modify_area][modify_num - boundry[modify_area]] = modify_content
            num -= 1
        else:
            if content == 'N':
                target[i].append('删除')
            else:
                target[i].append(content)
        content = input('%d-area-%d: ' % (i + 1, num)).upper()
        num += 1
    num -= 1
    boundry[i] = num

print("papers['%s'] = [ \n    %s, \n    %s, \n    %s, \n    %s\n]\n" % (paper_name, str(target[0]), str(target[1]), str(target[2]), str(target[3])))
'''

import matplotlib.pyplot as plt
import os

# 数据
papers = {}

papers['2024'] = [
    ['删除', 'D', 'ACD', 'BC', 'BD', 'B', 'CD', 'BCD', 'B', '删除', 'A', '删除', 'A', 'B', 'C', 'A', 'D', 'CD', '删除', 'D', 'ACD', '删除', 'BCD', 'ABD', 'C', '删除', '删除', 'C', 'D', 'AC', 'BD'],
    ['BCD', 'AD', 'C', 'BD', 'D', 'B', 'BC', '删除', 'CD', 'AD', 'AC', 'AD', 'AD', 'AD', 'AB', '删除', '删除', 'AC', 'D'],
    ['BD', 'BC', 'AB', 'AB', 'CD', 'BC', 'AB', 'CD', 'CD', 'AC', 'C', 'ABD', 'D', 'AD', 'C', 'D', 'BD', 'AD', 'BCD', 'ABD', 'C', '删除', 'CD', 'C', 'B', 'A', 'B'],
    ['B', 'D', 'A', 'ABCD', 'A', 'AC', 'A', 'AB', 'BCD', 'AB', 'B', 'ACD', 'C', '删除', 'AC', 'A', 'CD', 'ABD', 'B', 'A', 'A', 'B', 'ABC', 'B', 'BCD', 'CD', 'ABC', 'AD', '删除']
]
papers['2023'] = [
    ['删除', 'D', 'C', 'A', '删除', 'B', 'D', 'B', 'AB', 'D', 'ACD', 'C', 'C', 'A', 'B', 'D', 'C', 'C', 'ABCDE', 'ABCD', 'BCE', 'AD', 'C', 'D', 'ABC', 'C', 'C', 'D', 'CE', 'D'],
    ['AC', 'B', 'B', 'BC', 'C', 'A', 'D', 'C', 'A', 'B', 'D', 'A', 'B', 'BC', 'D', 'AD', 'BC', 'C', 'D', 'C', 'C', 'D', 'C', 'A', 'C', 'BC', 'ABCD', 'B', 'AC', 'B'],
    ['删除', 'E', 'C', 'D', 'AC', 'A', 'D', 'E', 'ACD', 'D', 'A', 'AC', 'ABD', 'D', 'BD'],
    ['AB', 'D', 'C', 'AC', 'A', 'B', 'BC', 'A', 'A', 'D', 'B', 'C', 'D', 'ABC', 'ABD', 'C', 'C', '删除', 'C', 'D', 'A', 'C', 'D', '删除', 'C']
]
papers['2022'] = [
    ['AC', 'A', 'C', 'A', 'B', 'C', 'D', 'AC', 'B', 'AE', 'AD', 'ABC', 'D', 'C', 'A', 'CD', 'AD', 'D', 'B', 'A', 'A', 'BCD', 'D', 'B', 'A'],
    ['AD', 'ACD', 'C', 'AB', 'D', 'B', 'B', 'D', 'C', 'B', '删除', 'ACD', 'C', 'AC', 'B', 'AB', 'B', 'A', 'C'],
    ['AD', 'B', '删除', 'C', 'A', 'BC', 'CD', 'AD', 'A', 'ABD', 'B', 'A', 'B', 'ABD', 'ABC', 'CD', 'BCD', 'AC', 'ABD', 'BCD', 'AB', 'AC', 'C', 'C', 'D', 'C', 'B', 'B', 'A', 'D', 'BC'],
    ['C', 'A', 'C', 'B', 'D', 'A', 'B', 'D', 'B', 'C', 'A', 'C', 'AC', 'B', 'ABC', 'BD', '删除', 'C', 'B', 'D', 'B', 'B', 'C', 'A', 'A', '删除', 'CD', 'A', 'BCE', 'AD']
]
papers['2021'] = [
    ['D', 'C', 'D', 'B', 'BC', 'D', 'C', 'C', 'C', 'A', 'B', 'A', 'C', 'B', 'BCD', 'D', 'D', 'ACD', 'ABD', 'D', 'A', 'ABCD', 'B', 'AB', 'ABD', 'ABDE', 'B', 'BDE', 'CD', 'BC'], 
    ['B', 'D', 'D', 'CD', 'A', 'C', 'C', 'E', 'B', 'C', 'C', 'BCD', 'BE', 'AD', 'BD', 'A', 'A', '删除', 'C', 'D', 'B', 'C', 'A', 'ABD', 'D', 'BCD', 'B', 'CD', 'BCD', 'ABE'],
    ['B', 'AD', 'AC', 'C', 'D', 'ABD', 'BCD', 'B', 'A', 'B', 'D', 'ABC', 'ABD', 'BD', 'ABCD'],
    ['D', 'D', 'E', 'C', 'AB', 'D', 'ABD', 'ABD', 'BE', 'ABC', 'D', 'BCD', 'B', 'ABD', 'AC', 'A', 'D', 'B', 'C', 'D', 'D', 'C', 'AC', 'A', 'B']
]
papers['2020-1'] = [
    ['ABD', 'CD', 'C', 'A', 'ABC', 'C', 'D', '删除', 'C', 'B', 'AB', 'CD', 'AD', 'ACD', 'ABC', 'B', 'BD', 'AB', 'A', 'BCD', 'C', 'B', 'CD', '删除'],
    ['AD', 'D', 'A', 'D', 'B', '删除', 'A', 'C', 'C', 'B', 'D', 'B', 'A', 'C', 'B', 'A', 'C', 'CD', 'D', 'C', 'A', '删除', 'BC', 'A', 'ABD', 'B', 'D', 'C', 'D', 'AC', 'C', 'BCD'],
    ['AD', 'AB', 'BD', 'BD', 'ABC', 'C', 'AD', 'D', 'C', 'C', 'C', 'ABCD', 'C', 'B', 'A', 'C', 'BC', 'AD', 'D', 'BC'],
    ['B', 'A', 'A', 'C', 'B', 'C', 'A', 'AC', 'D', 'A', 'ABCD', 'D', 'A', 'CD', 'A', 'BD', 'C', 'BC', 'BD', 'B', 'C', 'ACD', 'D', 'C', 'B', 'D', 'BD']
]
papers['2020-2'] = [
    ['A', 'ABD', 'B', 'BCD', 'C', '删除', 'A', 'C', 'A', 'B', 'B', 'C', 'B', 'D', 'D', 'C', 'C', 'BC', 'BCD', 'C', 'D', 'D', 'A', 'C', 'C', 'A', 'C', 'BD', 'D', 'B', 'BCE'],
    ['B', 'A', 'B', 'B', 'AB', 'BD', 'AD', 'BD', 'B', 'A', 'D', 'BD', 'C', 'ABCD', 'A', 'B', 'D', 'A', 'B', 'C', 'C', 'A', 'D', 'A', 'C', 'C', 'D', 'D', 'B', 'B', 'C', 'B', 'D', 'D'],
    ['ACD', 'AE', 'B', 'D', 'B', 'ABCD', 'C', 'A', 'B', 'ABCDE', 'AD', 'BD', 'D', 'BC', 'ABE', 'A', 'A', 'C', 'B'],
    ['B', 'A', 'C', 'B', 'B', 'D', 'C', 'B', 'C', 'D', 'A', 'A', 'C', 'C', 'C', 'D', 'C', 'CD', 'AC', 'B', 'C', 'C', 'C', 'C', 'AD', 'AC', 'C']
]
papers['2019'] = [
    ['删除', 'D', 'C', 'C', 'C', 'B', 'C', 'C', 'ABC', 'A', 'C', 'D', 'C', 'D', 'D', 'D', 'D', 'A', 'ABC', '删除', 'ACDE', 'D', 'B', 'D', 'B', 'B', 'C', 'ACE', 'ACE', 'B'],
    ['A', 'C', 'D', 'B', 'BC', '删除', 'C', 'ACD', 'A', 'C', 'D', 'B', 'C', 'C', 'A', 'C', 'CD', 'ABC', 'BD', 'B', 'C', 'C', 'ACD', 'D', 'C', 'D', 'C', 'B', 'D', 'D', 'B', 'B', 'CD', 'AC', 'BD'],
    ['B', 'D', 'B', 'C', 'BD', 'B', 'C', 'C', 'A', 'C', 'B', 'A', 'D', 'A', 'A', 'ABCD', 'D', 'C', 'AC', 'AB', 'AB', 'ABC'],
    ['A', 'C', 'B', 'C', 'D', 'D', 'E', 'C', 'A', 'C', 'ACD', 'C', 'BD', 'B', 'D', 'AE', 'ABCD', 'B', 'A', 'D', 'D', 'B', 'AB', 'D', 'B', 'C', 'B', 'AE', 'CE']
]
papers['2018'] = [
    ['ABD', 'BD', '删除', 'BC', '删除', '删除', 'C', 'D', 'B', 'B', 'ACE', 'ABCD', 'ABD', 'A', 'A', 'A', 'B', 'A', 'B', 'B', 'D', 'C', 'B', '删除', 'AB', 'BC', 'C', 'D', 'D', 'AE', 'BD'],
    ['C', '删除', 'ABD', 'D', 'C', 'D', 'D', 'B', 'D', 'D', 'B', 'A', 'D', 'B', '删除', 'B', 'B', 'B', 'C', 'BD', 'AB', '删 除', 'D', 'D', 'C', 'B', 'D', 'C', '删除', 'AD', 'ABCD', 'ACD', 'D', '删除', 'AD', 'C', 'AD'],
    ['DC', 'C', 'E', 'D', 'B', 'C', 'D', 'AC', 'D', 'C', 'B', 'ACD', 'B', 'D', 'D', '删除', 'ACE', 'AB', '删除', 'C', 'C'], 
    ['A', 'CD', 'AB', 'D', 'A', 'A', 'ACD', 'BCD', 'AD', 'AC', 'A', '删除', 'A', 'A', 'C', 'C', 'B', 'D', 'ABCD', 'AD', 'C', 'BCD', 'AB', 'BE', 'C', 'C', 'C']
]
papers['2017'] = [
    ['D', 'C', 'D', 'D', 'A', 'B', 'A', 'A', 'C', 'D', 'B', 'D', 'D', 'C', 'B', 'C', 'B', 'B', 'B', 'B', 'D', 'A', 'A', 'D', 'BD', '删除', 'BC', 'ABCE', 'BCD', 'ABCD', 'ACD'],
    ['C', 'C', 'B', 'D', 'B', 'C', 'D', 'C', 'A', 'B', 'B', 'B', 'D', 'D', 'B', 'B', 'B', 'D', 'B', 'D', 'C', 'D', 'D', 'B', 'B', 'BCDE', 'A', 'BC', 'ABD', 'BCD', 'ABD', 'AC', 'AC', '删除', 'ABCDE', 'ACD'],
    ['C', 'B', 'C', 'B', 'C', 'A', 'A', 'D', 'B', 'B', 'D', 'B', 'A', 'B', 'C', 'B', 'B', 'AC', 'ACD', 'BCD', 'AC', 'BCD', 'ACD'],
    ['B', 'C', 'C', 'E', 'C', 'C', 'D', 'D', 'C', 'C', 'A', 'B', 'D', 'D', '删除', 'B', 'C', 'A', 'D', 'D', 'ACD', 'C', 'C', 'ACD', 'ACE', 'ABCD', 'AC', 'BC', 'AD', 'ABD']
]
papers['2016'] = [
    ['D', 'B', 'BD', 'A', 'B', 'BC', 'BD', 'A', '删除', 'B', 'BD', '删除', 'C', '删除', 'A', 'A', 'A', '删除', '删除', 'C', 'A', 'D', 'BCD', 'D', 'B', 'AC'],
    ['B', 'C', 'C', 'BC', 'B', 'C', 'C', 'BC', 'B', 'D', 'B', 'C', 'A', 'BD', 'ABCD', 'ABCE', 'B', 'C', 'D', 'C', 'E', 'A', 'BE', 'ACD', 'AD', 'D', 'C', 'BC', 'A', 'D', 'D'],
    ['B', 'A', 'A', 'A', 'D', 'AB', '删除', 'C', 'ACD', 'AB', 'D', 'BD', 'ABC', 'A', '删除', 'B', 'AB', 'C', '删除', 'C'],
    ['D', 'A', 'ABC', 'B', 'AC', '删除', 'D', 'D', 'C', 'C', 'AB', 'B', 'D', '删除', 'B', 'C', 'D', 'AD', 'AB', '删除', 'D', '删除', 'D']
]
papers['2015'] = [
    ['B', 'D', 'C', 'B', '删除', 'C', 'A', 'C', '删除', 'A', 'A', 'E', 'C', 'D', 'B', 'B', 'D', 'A', 'D', 'C', 'D', 'B', 'D', 'AE', 'ACD', 'ABE', 'AC', 'BCD', 'ABD', 'AD', 'ABCD'],
    ['删除', 'C', 'B', 'B', 'A', 'A', 'C', 'C', 'C', 'D', 'C', 'D', 'C', 'C', 'A', 'A', 'D', 'B', 'B', 'D', 'A', 'B', 'D', 'A', 'A', 'D', 'A', '删除', 'ABC', 'ACD', 'ABC', 'AD', 'BC', 'ABCD', 'ABCD', 'BD'],
    ['D', 'B', 'A', 'C', 'D', 'B', 'C', 'A', 'C', 'B', 'C', 'D', 'A', 'A', 'B', 'B', 'C', 'BD', 'ABCD', 'ABD', 'BCD', 'AB', 'BCD'],
    ['A', 'C', 'B', 'A', 'A', 'D', 'D', 'A', 'B', 'A', 'E', 'C', 'C', 'C', 'C', 'A', 'A', 'B', 'D', 'C', 'B', 'C', 'ABCD', 'BC', 'ABCD', 'ABCD', 'ABCD', 'AB', 'ABCD', 'AB']
]   

# 解决`plt`中文乱码问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 绘制饼图
def draw_pie(data, name):
    A, B, C, D, E, N = 0, 0, 0, 0, 0, 0
    for str in data:
        if str == '删除':
            N += 1
            continue
        elif str[0] == '2':
            continue

        for c in str:
            if c == 'A': A += 1
            elif c == 'B': B += 1
            elif c == 'C': C += 1
            elif c == 'D': D += 1
            elif c == 'E': E += 1

    plt.clf()

    # 绘制带删除的
    sum = A + B + C + D + E + N
    A, B, C, D, E, N = A / sum, B / sum, C / sum, D / sum, E / sum, N / sum
    plt.subplot(121)
    plt.pie([A, B, C, D, E, N], 
            labels = [ 'A', 'B', 'C', 'D', 'E', '删除'], autopct='%1.1f%%')
    plt.title(name)

    # 绘制不带删除的
    sum = A + B + C + D + E
    A, B, C, D, E = A / sum, B / sum, C / sum, D / sum, E / sum
    plt.subplot(122)
    plt.pie([A, B, C, D, E], 
            labels = [ 'A', 'B', 'C', 'D', 'E'], autopct='%1.1f%%')
    plt.title(name + '(不计删除)')

    plt.draw()

    global current_index, pictures, fig
    fig.canvas.manager.set_window_title('%s (%d/%d)' % (name, current_index + 1, len(pictures)))
    plt.suptitle(name, fontsize = 20, color = 'r')
    plt.subplots_adjust(top = 0.85)
    
# 绘制折线图
def draw_linechart(data, name):
    year_data = []
    A_data, B_data, C_data, D_data, E_data, N_data = [], [], [], [], [], []
    A, B, C, D, E, N = 0, 0, 0, 0, 0, 0
    for str in data:
        if str == '删除':
            N += 1
            continue
        elif str[0] == '2':
            sum = A + B + C + D + E + N
            year_data.append(str)
            A_data.append(A / sum)
            B_data.append(B / sum)
            C_data.append(C / sum)
            D_data.append(D / sum)
            E_data.append(E / sum)
            N_data.append(N / sum)
            A, B, C, D, E, N = 0, 0, 0, 0, 0, 0

        for c in str:
            if c == 'A': A += 1
            elif c == 'B': B += 1
            elif c == 'C': C += 1
            elif c == 'D': D += 1
            elif c == 'E': E += 1

    plt.clf()

    plt.subplot(231)
    plt.plot(year_data, A_data)
    plt.xticks(fontsize = 6.5)
    for year, A in zip(year_data, A_data):
        plt.text(year, A, '%1.2f' % A, va = 'bottom', ha = 'center', fontsize = 10)
    plt.title('A值变化折线图')

    plt.subplot(232)
    plt.plot(year_data, B_data)
    plt.xticks(fontsize = 6.5)
    for year, B in zip(year_data, B_data):
        plt.text(year, B, '%1.2f' % B, va = 'bottom', ha = 'center', fontsize = 10)
    plt.title('B值变化折线图')

    plt.subplot(233)
    plt.plot(year_data, C_data)
    plt.xticks(fontsize = 6.5)
    for year, C in zip(year_data, C_data):
        plt.text(year, C, '%1.2f' % C, va = 'bottom', ha = 'center', fontsize = 10)
    plt.title('C值变化折线图')

    plt.subplot(234)
    plt.plot(year_data, D_data)
    plt.xticks(fontsize = 6.5)
    for year, D in zip(year_data, D_data):
        plt.text(year, D, '%1.2f' % D, va = 'bottom', ha = 'center', fontsize = 10)
    plt.title('D值变化折线图')

    plt.subplot(235)
    plt.plot(year_data, E_data)
    plt.xticks(fontsize = 6.5)
    for year, E in zip(year_data, E_data):
        plt.text(year, E, '%1.2f' % E, va = 'bottom', ha = 'center', fontsize = 10)
    plt.title('E值变化折线图')

    plt.subplot(236)
    plt.plot(year_data, N_data)
    plt.xticks(fontsize = 6.5)
    for year, N in zip(year_data, N_data):
        plt.text(year, N, '%1.2f' % N, va = 'bottom', ha = 'center', fontsize = 10)
    plt.title('删除变化折线图')

    plt.draw()

    global current_index, pictures, fig
    fig.canvas.manager.set_window_title('%s (%d/%d)' % (name, current_index + 1, len(pictures)))
    plt.suptitle(name, fontsize = 20, color = 'r')
    plt.subplots_adjust(top = 0.85)

target = []
target_1 = []
target_2 = []
target_3 = []
target_4 = []
for year, paper in papers.items():
    target_1 += paper[0] + [ year ]
    target_2 += paper[1] + [ year ]
    target_3 += paper[2] + [ year ]
    target_4 += paper[3] + [ year ]
    target += paper[0] + paper[1] + paper[2] + paper[3] + [ year ]


pictures = [
    lambda: draw_pie(target, '2015-2024年选择题概率统计 - 饼图'),
    lambda: draw_linechart(target, '2015-2024年选择题概率统计 - 折线图'), 
    lambda: draw_pie(target_1, '2015-2024年选择题第一部分概率统计 - 饼图'),
    lambda: draw_linechart(target_1, '2015-2024年选择题第一部分概率统计 - 折线图'),
    lambda: draw_pie(target_2, '2015-2024年选择题第二部分概率统计 - 饼图'),
    lambda: draw_linechart(target_2, '2015-2024年选择题第二部分概率统计 - 折线图'),
    lambda: draw_pie(target_3, '2015-2024年选择题第三部分概率统计 - 饼图'),
    lambda: draw_linechart(target_3, '2015-2024年选择题第三部分概率统计 - 折线图'),
    lambda: draw_pie(target_4, '2015-2024年选择题第四部分概率统计 - 饼图'),
    lambda: draw_linechart(target_4, '2015-2024年选择题第四部分概率统计 - 折线图'),
]

current_index = 0
def on_key(event):
    global current_index
    if event.key == 'right':
        if current_index < len(pictures) - 1:
            current_index += 1
            pictures[current_index]()
    elif event.key == 'left':
        if current_index > 0:
            current_index -= 1
            pictures[current_index]()

fig = plt.figure(figsize = (13, 6))

if not os.path.exists('target'):
    os.mkdir('target')

i = 1
for picture in pictures:
    picture()
    plt.savefig('target/' + str(i) + '.png')
    i += 1

pictures[0]()
fig.canvas.mpl_connect('key_press_event', on_key)
plt.show()
